package main

import "fmt"

func main() {
	s1 := make([]int, 3, 4) // 长度=3，容量=4，元素为[0, 0, 0]
	s2 := append(s1, 1)     // 在s1后追加元素1

	// 	请问s1、s2内各有什么元素？
	// s1: [0, 0, 0] (长度=3，容量=4)
	// s2: [0, 0, 0, 1] (长度=4，容量=4)

	// s1修改一个元素会影响s2吗？s2修改一个元素会影响s1吗？
	// 都会影响
	// 当执行 append(s1, 1) 时，由于s1的容量(4)足够容纳新元素(只需要3+1=4)，所以不会创建新的底层数组。s1和s2共享同一个底层数组

	// s2再增加一个元素会怎么样？
	// 结果：由于s2的容量(4)已经用尽，append操作会：
	// 创建新的底层数组（容量通常会翻倍，变成8）
	// 复制原有数据到新数组
	// 追加新元素
	fmt.Println(s2)
}
